package com.grm.demo.forkjoin;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.RecursiveAction;

/**
 * 查询文件
 * 功能描述：遍历指定目录（含子目录）找寻指定类型文件
 *
 * @author gaorimao
 * @date 2022/03/25
 */
public class QueryFile extends RecursiveAction {
    private File path;//当前任务需要搜寻的目录

    public QueryFile(File path) {
        this.path = path;
    }

    @Override
    protected void compute() {

        List<QueryFile> subTasks = new ArrayList<>();

        File[] files = path.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    subTasks.add(new QueryFile(file));
                } else {
                    System.out.println("文件：" + file.getAbsolutePath());
                }
            }
            if (!subTasks.isEmpty()) {
                for (QueryFile subTask : invokeAll(subTasks)) {
                    subTask.join();//等待子任务执行完成
                }
            }
        }
    }
}
